"""
====================================================================
Copyright (C) 2012-2013 Eric Blond

This file is part of Neptune.

Neptune is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Neptune is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with Neptune.  If not, see <http://www.gnu.org/licenses/>.
====================================================================

Created on 18 Dec 2012

@author: Eric
"""

import wx
from ..nucleus import public as nucleus
from . import utils
from . import size
from . import context

#######

class Button(nucleus.Page):
    
    _WxButton = None
    _Context  = None

    Label      = None
    OnClick    = None
    GridParams = None
    SizeParams = None

    @nucleus.cell
    def _WxWindow(self):
        return self._WxButton

    def _wx_on_click(self, event):
        utils.call_user_cb((~self).OnClick, event)

    def _create(self, ctx):
        self._Context = context.Context(Parent = ctx, Instance = self)
        if self.SizeParams and self.SizeParams.Size:
            size = self.SizeParams.Size
        else:
            size = wx.DefaultSize
        self._WxButton = wx.Button(parent = self._Context._WxWindow,
                                   id = wx.ID_ANY,
                                   label = unicode(self.Label if self.Label is not None else ''),
                                   size = size)
        if self.OnClick:
            self._Context._WxFrame.Bind(wx.EVT_BUTTON,
                                        self._wx_on_click,
                                        self._WxButton)

    def _destroy(self):
        self._WxButton.Destroy()
        self._WxButton = None
        self._Context = None
